package com.recharge.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.recharge.common.result.ResultDO;
import com.recharge.core.entity.ProviderApiEntity;
import com.recharge.domain.query.OrderStatusQueryDO;
import com.recharge.domain.query.ProviderApiQueryDO;
import com.recharge.domain.vo.GoodsChannelDO;
import com.recharge.domain.vo.ProviderApiDO;
import com.recharge.domain.vo.ProviderCallbackDO;

/**
 * <p>
 * 上游供应商渠道API 服务类
 * </p>
 *
 * @author reagan
 * @since 2020-08-19
 */
public interface ProviderApiService extends IService<ProviderApiEntity> {

    public ResultDO add(ProviderApiDO domain);

    public ResultDO addCallback(ProviderCallbackDO domain);

    public ResultDO updateCallback(String serialNumber, String voucherNo, String providerOrderNo, Integer status);

    public ResultDO edit(ProviderApiDO domain);

    public ResultDO get(String id);

    public ResultDO remove(String id, String modifier);

    /**
     * 查询供货商API信息
     * @param domain
     * @return
     */
    public ResultDO find(ProviderApiQueryDO domain);

    /**
     * 根据供货商ID删除供货API
     *
     * @param id
     * @param modifier
     * @return
     */
    ResultDO removeByProviderId(String id, String modifier);

//    /**
//     * 根据供货商ID查询供货API
//     *
//     * @param providerId
//     * @return
//     */
//    ResultDO getByProviderId(String providerId);

    /**
     * 根据供应商号查询供应商API信息
     * @param providerNo 供应商户号
     */
    ResultDO getByProviderNo(String providerNo);

    /**
     * 提交订单
     *
     * @param domain 商品和供应商信息
     * @return com.recharge.common.result.ResultDO
     */
    ResultDO commitOrder(GoodsChannelDO domain);

    /**
     * 订单异步回调
     *
     * @param providerNo 供应商号
     * @param paramStr   请求param参数信息
     * @param bodyStr    请求body参数信息
     * @return com.recharge.common.result.ResultDO
     */
    ResultDO backOrder(String providerNo, String paramStr, String bodyStr);

    /**
     * 余额查询
     *
     * @param providerApiDO 供应商信息
     * @return com.recharge.common.result.ResultDO
     */
    ResultDO queryBalance(ProviderApiDO providerApiDO);

    /**
     * 订单查询
     *
     * @param domain 订单查询参数
     * @return com.recharge.common.result.ResultDO
     */
    ResultDO queryOrder(OrderStatusQueryDO domain);

}
